package com.dys.testinterface04;

/**
 * @className: com.dys.testinterface04.InterfaceTest
 * @description: jdk8接口增强
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/31 下午9:16
 */
public interface InterfaceTest {
    void test1();

    // 接口中新增抽象方法, 所有实现类都要重写这个抽象方法, 不利于接口的拓展
    public abstract void test2();

    // 默认方法可以被继承，实现类可以直接调用接口默认方法，也可以重写接口默认方法
    public default String test3() {
        System.out.println("Jdk8新增了默认方法......");
        return "默认方法";
    }

    public static String test4() {
        System.out.println("Jdk8之后新增了静态方法......此方法是接口的方法不能被子类实现");
        return "super";
    }

    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        // 静态方法不能被继承，实现类不能重写接口的静态方法，只能使用接口名调用
        System.out.println(InterfaceTest.test4());
        // 默认方法的调用
        InterfaceTest a = new A();
        System.out.println(a.test3());
    }
}

class A implements InterfaceTest {

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }

    @Override
    public String test3() {
        System.out.println("A子类重写接口中的默认方法......");
        return "ok";
    }
}

class B implements InterfaceTest {

    @Override
    public void test1() {

    }

    @Override
    public void test2() {

    }
}